package com.itany.corejava.code11_线程;

import java.util.ArrayList;

/**
 * @author MissChen
 * @date 2024年03月13日 10:51
 */
public class Test13_线程单例 {

    public static void main(String[] args) {
        ArrayList<Stu> list=new ArrayList<>();
        ThreadLocal<Integer> local=new ThreadLocal<>();
        // ThreadLocal叫做线程变量，意思是ThreadLocal中填充的变量属于当前线程，该变量对其他线程而言是隔离的，
        // 也就是说该变量是当前线程独有的变量。
        // ThreadLocal为变量在每个线程中创建了一个副本，那么每个线程可以访问自己内部的副本变量
        // 同一个ThreadLocal锁包含的对象，在不同的Thread中有不同的副本的
        new Thread(new Runnable() {
            @Override
            public void run() {
                Stu stu1=new Stu();
                Stu stu2=new Stu();
                list.add(stu1);
                list.add(stu2);
                local.set(100);

                System.out.println(Thread.currentThread().getName()+"中获取的list的数据："+list.get(0));
                System.out.println(Thread.currentThread().getName()+"中获取的list的数据："+list.get(1));
                System.out.println(Thread.currentThread().getName()+"中获取local的数据："+local.get());
            }
        },"t1").start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"中获取的list的数据："+list.get(0));
                System.out.println(Thread.currentThread().getName()+"中获取的list的数据："+list.get(1));
                System.out.println(Thread.currentThread().getName()+"中获取local的数据："+local.get());
            }
        },"t2").start();
    }

}

class Stu{

}
// class C implements  Runnable{
//     @Override
//     public void run() {
//
//     }
// }
